home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 4490 / 4490.xpi / chrome / wmn.jar / content / alert.js < prev    next >
Text File  |  2010-01-30  |  7KB  |  222 lines

  1. /* ***** BEGIN LICENSE BLOCK *****
  2.  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
  3.  *
  4.  * The contents of this file are subject to the Mozilla Public License Version
  5.  * 1.1 (the "License"); you may not use this file except in compliance with
  6.  * the License. You may obtain a copy of the License at
  7.  * http://www.mozilla.org/MPL/
  8.  *
  9.  * Software distributed under the License is distributed on an "AS IS" basis,
  10.  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
  11.  * for the specific language governing rights and limitations under the
  12.  * License.
  13.  *
  14.  * The Original Code is mozilla.org code.
  15.  *
  16.  * The Initial Developer of the Original Code is
  17.  * Netscape Communications Corporation.
  18.  * Portions created by the Initial Developer are Copyright (C) 1998
  19.  * the Initial Developer. All Rights Reserved.
  20.  *
  21.  * Contributor(s):
  22.  *   Scott MacGregor <mscott@netscape.com>
  23.  *   Jens Bannmann <jens.b@web.de>
  24.  *   Byungwook Kang <tobwithu@gmail.com>
  25.  *
  26.  * Alternatively, the contents of this file may be used under the terms of
  27.  * either the GNU General Public License Version 2 or later (the "GPL"), or
  28.  * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
  29.  * in which case the provisions of the GPL or the LGPL are applicable instead
  30.  * of those above. If you wish to allow use of your version of this file only
  31.  * under the terms of either the GPL or the LGPL, and not to allow others to
  32.  * use your version of this file under the terms of the MPL, indicate your
  33.  * decision by deleting the provisions above and replace them with the notice
  34.  * and other provisions required by the GPL or the LGPL. If you do not delete
  35.  * the provisions above, a recipient may use your version of this file under
  36.  * the terms of any one of the MPL, the GPL or the LGPL.
  37.  *
  38.  * ***** END LICENSE BLOCK ***** */
  39.  
  40. // Copied from nsILookAndFeel.h, see comments on eMetric_AlertNotificationOrigin
  41. const NS_ALERT_HORIZONTAL = 1;
  42. const NS_ALERT_LEFT = 2;
  43. const NS_ALERT_TOP = 4;
  44.  
  45. var gFinalSize;
  46. var gCurrentSize = 1;
  47.  
  48. var gSlideIncrement = 1;
  49. var gSlideTime = 10;
  50. var gOpenTime = 4000; // total time the alert should stay up once we are done animating.
  51. var gOrigin = 0; // Default value: alert from bottom right, sliding in vertically.
  52.  
  53. var gAlertListener = null;
  54. var gAlertTextClickable = false;
  55. var gAlertCookie = "";
  56.  
  57. var wmn=null;
  58. var timer;
  59. var timerFunc;
  60. const dout=Components.utils.reportError;
  61. function setTimer(func,time){
  62.   var o={
  63.     notify:function(aTimer){
  64.       func();
  65.     }
  66.   };
  67.   timer.initWithCallback(o,time,Components.interfaces.nsITimer.TYPE_ONE_SHOT);
  68. }
  69. function prefillAlertInfo()
  70. {
  71.   wmn=window.arguments[1];
  72.   var obj=document.getElementById("alertTextBox");
  73.   var info=window.arguments[0];
  74.   var close=true;
  75.   for(var i=0;i<info.length;i++){
  76.     var o=info[i];
  77.     var n;
  78.     if(o.enabled&&(n=o.calcCount())>0){
  79.       var em = document.createElement("label");
  80.       em.setAttribute("value",o.accName+" : "+o.mailData.desc);
  81.       em.setAttribute("class","alertText plain");
  82.       em.setAttribute("onclick","wmn.openMail("+i+",null)");
  83.       obj.appendChild(em);
  84.       close=false;
  85.     }
  86.   }
  87.   if(close)window.close();
  88. }
  89. function onAlertLoad()
  90. {
  91.   // Read out our initial settings from prefs.
  92.   var prefService = Components.classes["@mozilla.org/preferences-service;1"].getService();
  93.   prefService = prefService.QueryInterface(Components.interfaces.nsIPrefService);  
  94.   var prefBranch = prefService.getBranch(null);  
  95.   try
  96.   {
  97.     gSlideIncrement = prefBranch.getIntPref("alerts.slideIncrement");
  98.     gSlideTime = prefBranch.getIntPref("alerts.slideIncrementTime");
  99.     gOpenTime = prefBranch.getIntPref("alerts.totalOpenTime");
  100.   }
  101.   catch (ex){}
  102.   if(prefBranch.getBoolPref("extensions.wmn.keepAlert"))gOpenTime=0;
  103.     timer = Components.classes["@mozilla.org/timer;1"]
  104.                 .createInstance(Components.interfaces.nsITimer);      
  105.   // Make sure that the contents are fixed at the window edge facing the
  106.   // screen's center so that the window looks like "sliding in" and not
  107.   // like "unfolding". The default packing of "start" only works for
  108.   // vertical-bottom and horizontal-right positions, so we change it here.
  109.   if (gOrigin & NS_ALERT_HORIZONTAL)
  110.   {
  111.     if (gOrigin & NS_ALERT_LEFT)
  112.       document.documentElement.pack = "end";
  113.  
  114.     // Additionally, change the orientation so the packing works as intended
  115.     document.documentElement.orient = "horizontal";
  116.   }
  117.   else
  118.   {
  119.     if (gOrigin & NS_ALERT_TOP)
  120.       document.documentElement.pack = "end";
  121.   }
  122.  
  123.   var alertBox = document.getElementById("alertBox");
  124.   alertBox.orient = (gOrigin & NS_ALERT_HORIZONTAL) ? "vertical" : "horizontal";
  125.  
  126.   // The above doesn't cause the labels in alertTextBox to reflow,
  127.   // see bug 311557. As the theme's -moz-box-align css rule gets ignored,
  128.   // we work around the bug by setting the align property.
  129.   if (gOrigin & NS_ALERT_HORIZONTAL)
  130.   {
  131.     document.getElementById("alertTextBox").align = "center";
  132.   }
  133.  
  134.   sizeToContent();
  135.  
  136.   // Work around a bug where sizeToContent() leaves a border outside of the content
  137.   var contentDim = document.getElementById("alertBox").boxObject;
  138.   if (window.innerWidth == contentDim.width + 1)
  139.     --window.innerWidth;
  140.  
  141.   // Start with a 1px width/height, because 0 causes trouble with gtk1/2
  142.   gCurrentSize = 1;
  143.  
  144.   // Determine final size
  145.   if (gOrigin & NS_ALERT_HORIZONTAL)
  146.   {
  147.     gFinalSize = window.outerWidth;
  148.     window.outerWidth = gCurrentSize;
  149.   }
  150.   else
  151.   {
  152.     gFinalSize = window.outerHeight;
  153.     window.outerHeight = gCurrentSize;
  154.   }
  155.  
  156.   // Determine position
  157.   var x = gOrigin & NS_ALERT_LEFT ? screen.availLeft :
  158.           screen.availLeft + screen.availWidth - window.outerWidth;
  159.   var y = gOrigin & NS_ALERT_TOP ? screen.availTop :
  160.           screen.availTop + screen.availHeight - window.outerHeight;
  161.  
  162.   // Offset the alert by 10 pixels from the edge of the screen
  163.   if (gOrigin & NS_ALERT_HORIZONTAL)
  164.     y += gOrigin & NS_ALERT_TOP ? 10 : -10;
  165.   else
  166.     x += gOrigin & NS_ALERT_LEFT ? 10 : -10;
  167.   window.moveTo(x, y);
  168.   setTimer(animateAlert, gSlideTime);
  169. }
  170.  
  171. function animate(step)
  172. {
  173.   gCurrentSize += step;
  174.  
  175.   if (gOrigin & NS_ALERT_HORIZONTAL)
  176.   {
  177.     if (!(gOrigin & NS_ALERT_LEFT))
  178.       window.screenX -= step;
  179.     window.outerWidth = gCurrentSize;
  180.   }
  181.   else
  182.   {
  183.     if (!(gOrigin & NS_ALERT_TOP))
  184.       window.screenY -= step;
  185.     window.outerHeight = gCurrentSize;
  186.   }
  187. }
  188.  
  189. function animateAlert()
  190. {
  191.   if (gCurrentSize < gFinalSize)
  192.   {
  193.     animate(gSlideIncrement);
  194.     setTimer(animateAlert, gSlideTime);
  195.   }
  196.   else if(gOpenTime>0)
  197.     setTimer(animateCloseAlert, gOpenTime);
  198. }
  199.  
  200. function animateCloseAlert()
  201. {
  202.   if (gCurrentSize > 1)
  203.   {
  204.     animate(-gSlideIncrement);
  205.     setTimer(animateCloseAlert, gSlideTime);
  206.   }
  207.   else
  208.     closeAlert();
  209. }
  210.  
  211. function closeAlert() {
  212.     if (gAlertListener)
  213.       gAlertListener.observe(null, "alertfinished", gAlertCookie);
  214.     window.close();
  215. }
  216.  
  217. function onAlertClick()
  218. {
  219.   if (gAlertListener && gAlertTextClickable)
  220.     gAlertListener.observe(null, "alertclickcallback", gAlertCookie);
  221. }
  222.